<?php
//require_once 'BaseController.php';

/**
 * Ponta先着ポイントプレゼントキャンペーン 応募フォーム<br />
 *
 * @package apamanshop
 * @author H.Imamura
 * @copyright (c) 2014 SystemSoft Corp. All rights reserved
 */
class Inquiry_Ponta201402Controller extends Apm_Controller_Base
{
	// 応募上限（1万件）
	//private $_max_entry_count = 1;
	private $_max_entry_count = 10000;

	/** ベースURL **/
	protected $_baseurl    = null;
	protected $_aplbaseurl = null;
	protected $_sslurl     = null;
	protected $_imgpass    = null;

	/** テンプレート **/
	protected $_display_path   = null;
	protected $_main_helper    = null;
	protected $_entry_helper   = null;
	protected $_confirm_helper = null;
	protected $_send_helper    = null;
	protected $_senderr_helper = null;

	/** 共通パラメータ **/
	protected $title       = null;
	protected $description = null;
	protected $keywords    = null;
	protected $block_title = null;
	protected $block_read  = null;

	/**
	 * 初期処理
	 */
	public function preDispatch()
	{
		// ベースURL設定
		$this->_baseurl      = $this->_config['apm']['baseurl'];
		$this->_aplbaseurl   = $this->_config['apm']['apl']['static']['baseurl'];
		$this->_sslurl       = $this->_config['apm']['ssl']['baseurl'];
		
		// CSS設定
		$this->addMetaCss('/shared/css/input.css', array('type' => 'text/css','media' => 'all'));
		$this->addMetaCss('/css/common/valuable.css', array('type' => 'text/css','media' => 'all'));
		$this->addMetaCss('/css/inquiry/hp/form.css', array('type' => 'text/css','media' => 'all'));
		$this->addMetaCss('/shared/css/cp.css', array('type' => 'text/css','media' => 'all'));
		
		// JS設定
		$this->addMetaJs('/app/js/jquery.validation.js');
		
		// パラメータ取得
		$this->_params = $this->getParameters();
		$this->_data['Request'] = $this->_params;
		// ヘッダー・フッター表示しない
		//$this->setXPassThroutgh();
		
		// メインテンプレート
		$this->_display_path = APPLICATION_PATH . '/modules/inquiry/views/ponta/ponta201402.tpl';
		// 共通パラメータ取得
		$this->getSubParams();
		
		
		// 終了 2014/03/06
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_end.tpl');
		$this->block_title = '受付終了';
		$this->setSubParams();
		$this->_data['main'] = $this->_main_helper->getBlock($this->_data);
		$this->display($this->_display_path);
	}

	/**
	 * 後処理
	 */
	public function postDispatch()
	{
		// 共通パラメータ設定
		$this->setSubParams();
		
		//ブロック設定
		$this->_data['main'] = $this->_main_helper->getBlock($this->_data);
		
		//表示
		$this->display($this->_display_path);
	}

	/**
	 * インデックスアクション（入力フォーム）
	 *
	 */
	public function indexAction()
	{
		// キャンペーンセッション確認
		$isCampaign = false;
		$mySession = new Zend_Session_Namespace('InquiryCampaign');
		if (isset($mySession->ToiawaseId) && is_numeric($mySession->ToiawaseId)) {
			// 問い合わせIDのチェック
			if (preg_match('/^[0-9]{17,18}$/', $mySession->ToiawaseId)) {
				$isCampaign = true;
			}
		}
		if (!$isCampaign) {
			// 不正アクセス
			Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/ng');
			exit();
		}
		
		// キャンペーン応募数確認
		$pontaModel = new Inquiry_Model_Ponta201402();
		try {
			$count = $pontaModel->countEntryLog();
			if ($count >= $this->_max_entry_count) {
				// 受付完了
				Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/end');
				exit();
			}
		} catch (Exception $e) {
			// エラー処理
			__log_error(__FILE__, __LINE__, __METHOD__, $e->getMessage());
			Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/error');
			exit();
		}
		
		// メインhelper
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_input.tpl');
		$this->block_title = 'Ponta会員ID入力フォーム';
		$this->_data['isIndex'] = true;
	}

	/**
	 * 不正アクセス画面
	 *
	 */
	public function ngAction()
	{
		// メインhelper
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_ng.tpl');
		$this->block_title = 'アクセスエラー';
	}

	/**
	 * 受付完了画面
	 *
	 */
	public function endAction()
	{
		// メインhelper
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_end.tpl');
		$this->block_title = '受付終了';
	}

	/**
	 * 送信処理
	 *
	 */
	public function submitAction()
	{
		// ロジカルチェック
		$mySession = new Zend_Session_Namespace('InquiryCampaign');
		if (isset($mySession->ToiawaseId) && is_numeric($mySession->ToiawaseId)) {
			// 問い合わせIDのチェック
			if (preg_match('/^[0-9]{17,18}$/', $mySession->ToiawaseId)) {
				$this->_params['toiawaseId'] = $mySession->ToiawaseId;
			}
		}
		if (isset($this->_params['PONTA_ID']) && is_numeric($this->_params['PONTA_ID'])) {
			// Ponta会員IDのチェック
			if (preg_match('/^[0-9]{15}$/', $this->_params['PONTA_ID'])) {
				$this->_params['pontaId'] = $this->_params['PONTA_ID'];
			}
		}
		if (!(isset($this->_params['toiawaseId']) && isset($this->_params['pontaId']))) {
			Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/error');
			exit();
		}
		
		// トランザクション開始
		$result = 0;
		$pontaModel = new Inquiry_Model_Ponta201402();
		$db = $pontaModel->getDbConnection();
		$pontaModel->startTransaction($db);
		try {
			// 重複チェック
			$count = $pontaModel->countEntryLog($this->_params, $db);
			if ($count > 0) {
				// 重複応募
				$result = 1;
				$pontaModel->rollbackTransaction($db);
			} else {
				// データ登録
				if (!$pontaModel->insertEntryLog($this->_params, $db)) {
					// 登録エラー
					$result = 2;
					$pontaModel->rollbackTransaction($db);
				} else {
					// コミット
					$pontaModel->commitTransaction($db);
				}
			}
		} catch (Exception $e) {
			// エラー処理
			$result = 2;
			__log_error(__FILE__, __LINE__, __METHOD__, $e->getMessage());
			// ロールバック
			$pontaModel->rollbackTransaction($db);
		}
		// DB切断
		$db->closeConnection();
		
		// 完了画面へ遷移
		if ($result == 1) {
			Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/duplication');
		} elseif ($result == 2) {
			Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/error');
		} else {
			Apm_Util::redirect($this->_baseurl.'inquiry/ponta201402/send');
		}
		exit();
	}

	/**
	 * 完了画面
	 *
	 */
	public function sendAction()
	{
		// セッション削除
		Zend_Session::namespaceUnset('InquiryCampaign');
		
		// メインhelper
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_send.tpl');
		$this->block_title = '応募完了';
	}

	/**
	 * 重複応募画面
	 *
	 */
	public function duplicationAction()
	{
		// メインhelper
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_duplication.tpl');
		$this->block_title = '重複応募';
	}

	/**
	 * エラー画面
	 *
	 */
	public function errorAction()
	{
		// メインhelper
		$this->_main_helper = $this->getApmHelper(APPLICATION_PATH . '/modules/inquiry/views/ponta/201402_error.tpl');
		$this->block_title = '送信エラー';
	}

	/**
	 * 共通パラメータ取得
	 *
	 */
	private function getSubParams()
	{
		$this->title       = '賃貸情報アパマンショップ';
		$this->description = '';
		$this->keywords    = '';
		$this->block_title = '';
		$this->block_read  = '';
		
		// パンくず設定
		//$this->_breadcrumb->reset();
	}

	/**
	 * 共通パラメータ設定
	 *
	 */
	private function setSubParams()
	{
		// タイトル
		$this->setTitle($this->title."[{$this->block_title}]");
		
		// Description
		//$this->_data['description'] = $this->description;
		
		// Keywords
		//$this->_data['keywords'] = $this->keywords;
		
		// パンくず
		//$this->_data['breadcrumb'] = $this->_breadcrumb->generateBreadcrumb();
		$this->setBreadCrumb(' ');
		
		// H1
		$this->_data['hi_title'] = $this->block_title;
		
		// アンカー
		//$this->setAnchorLink('<p class="pagetop"><a href="javascript:backToTop()"><strong>' . $this->block_title . 'ページのトップへ</strong></a></p>');
		
		// URL
		$this->_data['baseurl'] = $this->_baseurl;
		$this->_data['sslurl']  = $this->_sslurl;
	}

}
?>